package cluedo.gui;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import javax.swing.JLabel;

import cluedo.Player;
import static cluedo.Player.log;


/** Pannello al centro del tavolo di gioco, contiene:
 * etichetta che informa se e' il turno del gioctore;
 * tabellone.
 * */
public class CenterPanel extends JPanel {

	
	private static final long serialVersionUID = -7290384077840132421L;

	/**
	 * serve per comunicare se e' il turno del player oppure no
	 */
	private JLabel turnLabel;
	
	/**
	 * variabile per controllare se e' il turno del giocatore
	 */
	private boolean isMyTurn=false;
	
	
	/**
	 * il tabellone
	 */
	private BoardPanel boardPane=null;
	
	/**
	 * il player associato alla MainWindow
	 */
	private Player myPlayer;
	
	/**
	 * riferimento alla MainWindow in cui e' contenuto il CenterPanel
	 */
	private MainWindow wind;
	
	
	public CenterPanel(Player myPlayer, MainWindow wind) {
		
		this.myPlayer = myPlayer;
		this.wind = wind;
		
		log.println("CenterPanel: creazione pannello centrale");
		
		setBackground(Color.BLACK);
		
		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		
		this.setBackground(Color.BLACK);
		
		turnLabel = new JLabel("NON E' IL TUO TURNO - ATTENDI");
		turnLabel.setForeground(Color.RED);
		turnLabel.setAlignmentX(CENTER_ALIGNMENT);
		turnLabel.setFont(new Font("Arial", Font.BOLD, 20));
		
		
		add(turnLabel);
		
		add(Box.createRigidArea(new Dimension(0,20)));
		
		JPanel hzPane= new JPanel();
		
		hzPane.setBackground(Color.BLACK);
		
		hzPane.setLayout(new BoxLayout(hzPane, BoxLayout.X_AXIS));
		
		hzPane.add(Box.createRigidArea(new Dimension(20,0)));
		
		
		//tabellone
		boardPane = new BoardPanel(myPlayer,wind); 
		
		hzPane.add(boardPane);
		
		hzPane.add(Box.createRigidArea(new Dimension(20,0)));
		
		add(hzPane);
		
		add(Box.createRigidArea(new Dimension(0,5)));

		
		log.println("CenterPanel: Il pannello centrale e' stato creato");
		
		
	}
	
	/**
	 * Mostra graficamente se e' il turno del giocatore oppure no
	 * @param b true se e' l turno del giocatore, false altrimenti
	 */
	public void setPlayerTurn(boolean b){
		
		log.println("CenterPanel: imposto graficamente la stringa di testo sopra il tabellone, il parametro passato a setPlayerTurn e': "+b);
		
		if(b){
			if(isMyTurn) return;
			turnLabel.setForeground(Color.GREEN);
			turnLabel.setText("E' IL TUO TURNO - SVELA IL MISTERO");
			isMyTurn=true;
		}
		
		else{
			if(!isMyTurn) return;
			turnLabel.setForeground(Color.RED);
			turnLabel.setText("NON E' IL TUO TURNO - ATTENDI");
			isMyTurn=false;
			
		}
		
	}
	
	/**
	 * Comunica graficamente di attendere l'eventuale confutazione dell'ipotesi
	 */
	public void waitRefute(){
		log.println("CenterPanel: imposto graficamente la stringa di testo sopra il tabellone per comunicare di attendere la confutazione dell'ipotesi");
		turnLabel.setForeground(Color.YELLOW);
		turnLabel.setText("ATTENDI CHE LA TUA IPOTESI VENGA CONTROLLATA");	
	}
	
		
	/**
	 * restituisce il tabellone
	 * @return vedi descrizione
	 */
	public BoardPanel getBoard(){
			
		return this.boardPane;
			
		}
		
	
}
